package API_Jung;


import edu.uci.ics.jung.graph.DirectedSparseGraph;
import edu.uci.ics.jung.visualization.VisualizationViewer;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Point2D;
import java.util.Iterator;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import metodologia.ToDoNode;

public class MyMouseMenusToDo implements java.io.Serializable{
    
   public static class EdgeMenu2 extends JPopupMenu {        
        // private JFrame frame; 
        public EdgeMenu2() {
            super("Edge Menu");
            // this.frame = frame;
            //this.add(new DeleteEdgeMenuItem<String>());
        }
        
    }

    /*
    public static class WeightDisplay extends JMenuItem implements EdgeMenuListener<GraphElements.MyEdge> {
        public void setEdgeAndView(GraphElements.MyEdge e, VisualizationViewer visComp) {
            this.setText("Weight " + e + " = " + e.getWeight());
        }
    }
    
    public static class CapacityDisplay extends JMenuItem implements EdgeMenuListener<GraphElements.MyEdge> {
        public void setEdgeAndView(GraphElements.MyEdge e, VisualizationViewer visComp) {
            this.setText("Capacity " + e + " = " + e.getCapacity());
        }
    }*/
    
    public static class VertexMenu2 extends JPopupMenu {
        private final DirectedSparseGraph<ToDoNode, String> g1;
        
        public VertexMenu2(DirectedSparseGraph<ToDoNode, String> g, VisualizationViewer<ToDoNode, String> vv) {
            super("Vertex Menu");
            g1 = g;
            this.add(new VertexPropItem("Lista de Etapas", g1, vv));
            //this.addSeparator();
            //this.add(new Ativar("Tarefa Concluída", g1, vv));
            //this.add(new Desativar("Tarefa desativada", g1, vv));
            //this.addSeparator();
            //this.add(new Reset("Reset", g1, vv));
            
        }
    }
    
     public static class VertexPropItem extends JMenuItem implements VertexMenuListener<ToDoNode>,
            MenuPointListener {
        ToDoNode vertex;
        VisualizationViewer visComp;
        Point2D point;

        
        @Override
        public void setVertexAndView(ToDoNode vertex, VisualizationViewer visComp) {
            this.vertex = vertex;
            this.visComp = visComp;
        }

        @Override
        public void setPoint(Point2D point) {
            this.point = point;
        }
        
        public  VertexPropItem(String titulo, final DirectedSparseGraph<ToDoNode, String> g, final VisualizationViewer<ToDoNode, String> vv) {            
            super(titulo);
            this.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
                    // Determine the new location of the window
                    int w = vertex.getToDo().getSize().width;
                    int h = vertex.getToDo().getSize().height;
                    int x = (dim.width-w)/2;
                    int y = (dim.height-h)/2;

                    // Move the window
                    System.out.println(vertex.getState());
                    if ((vertex.getState() == 1 || vertex.getState() == 3) && (vertex.getType() == 2)) {
                        vertex.getToDo().setLocation(x, y);
                        vertex.getToDo().setVisible(true); 

                        //
                        //Realiza a tarefa: marca no como usado - mudar a cor dele
                        //
                        for (Iterator it = g.getEdges().iterator(); it.hasNext();) {
                            String edge = (String) it.next();

                            if (g.getEndpoints(edge).getFirst().getCatid() == vertex.getCatid()){
                                if (g.getEndpoints(edge).getFirst().isFinished()){
                                    g.getEndpoints(edge).getFirst().setState(3);
                                }
                            } else if (g.getEndpoints(edge).getSecond().getCatid() == vertex.getCatid()){
                                if (g.getEndpoints(edge).getSecond().isFinished()){
                                    g.getEndpoints(edge).getSecond().setState(3);
                                }                            
                            }
                        }
                    
                    /*
                     * Essa parte de código não é necessário para que ele mude de cor,
                     * porém fica mais rápido a mudança.
                     */
                    vv.repaint();
                    vv.validate();
                    
                    }
                }
                
            });
        }
        
    }
    
     
     public static class Ativar extends JMenuItem implements VertexMenuListener<ToDoNode>,
        MenuPointListener {
        ToDoNode vertex;
        VisualizationViewer visComp;
        Point2D point;

        
        @Override
        public void setVertexAndView(ToDoNode vertex, VisualizationViewer visComp) {
            this.vertex = vertex;
            this.visComp = visComp;
        }

        @Override
        public void setPoint(Point2D point) {
            this.point = point;
        }
        
        public  Ativar(String titulo, final DirectedSparseGraph<ToDoNode, String> g, final VisualizationViewer<ToDoNode, String> vv) {
            super(titulo);
            this.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
                    // Determine the new location of the window
                    int w = vertex.getToDo().getSize().width;
                    int h = vertex.getToDo().getSize().height;
                    int x = (dim.width-w)/2;
                    int y = (dim.height-h)/2;

                    if ((vertex.getState() != 2)&&(vertex.getType() == 2)) {
                        
                    //
                    //Realiza a tarefa: marca no como usado - mudar a cor dele
                    //
                    for (Iterator it = g.getEdges().iterator(); it.hasNext();) {
                        String edge = (String) it.next();
                        
                        if (g.getEndpoints(edge).getFirst().getCatid() == vertex.getCatid()){
                            //Nó fica VERDE - Teste finalizado!
                            g.getEndpoints(edge).getFirst().setState(3);
                        } else if (g.getEndpoints(edge).getSecond().getCatid() == vertex.getCatid()){
                            //Nó fica VERDE - Teste finalizado!
                            g.getEndpoints(edge).getSecond().setState(3);
                        }
                    }
                    
                    /*
                     * Essa parte de código não é necessário para que ele mude de cor,
                     * porém fica mais rápido a mudança.
                     */
                    vv.repaint();
                    vv.validate();
                    
                    }
                }
                
            });
        }
        
    }
     
     
     public static class Reset extends JMenuItem implements VertexMenuListener<ToDoNode>,
        MenuPointListener {
        ToDoNode vertex;
        VisualizationViewer visComp;
        Point2D point;

        
        @Override
        public void setVertexAndView(ToDoNode vertex, VisualizationViewer visComp) {
            this.vertex = vertex;
            this.visComp = visComp;
        }

        @Override
        public void setPoint(Point2D point) {
            this.point = point;
        }
        
        public  Reset(String titulo, final DirectedSparseGraph<ToDoNode, String> g, final VisualizationViewer<ToDoNode, String> vv) {
            super(titulo);
            this.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
                    // Determine the new location of the window
                    int w = vertex.getToDo().getSize().width;
                    int h = vertex.getToDo().getSize().height;
                    int x = (dim.width-w)/2;
                    int y = (dim.height-h)/2;
                    
                    if ((vertex.getState() != 2)&&(vertex.getType() == 2)) {
                    
                    //
                    //Realiza a tarefa: marca no como usado - mudar a cor dele
                    //
                    for (Iterator it = g.getEdges().iterator(); it.hasNext();) {
                        String edge = (String) it.next();
                        
                        //if (g.getEndpoints(edge).getFirst().getCatid() == vertex.getCatid()){
                            //Nó fica VERDE - Teste finalizado!
                            g.getEndpoints(edge).getFirst().setState(0);
                        //} else if (g.getEndpoints(edge).getSecond().getCatid() == vertex.getCatid()){
                            //Nó fica VERDE - Teste finalizado!
                            g.getEndpoints(edge).getSecond().setState(0);
                        //}
                    }

                    /*
                     * Essa parte de código não é necessário para que ele mude de cor,
                     * porém fica mais rápido a mudança.
                     */
                    vv.repaint();
                    vv.validate();
                    
                    }
                
                }
            });
        }
        
    }            
     
     public static class Desativar extends JMenuItem implements VertexMenuListener<ToDoNode>,
        MenuPointListener {
        ToDoNode vertex;
        VisualizationViewer visComp;
        Point2D point;

        
        @Override
        public void setVertexAndView(ToDoNode vertex, VisualizationViewer visComp) {
            this.vertex = vertex;
            this.visComp = visComp;
        }

        @Override
        public void setPoint(Point2D point) {
            this.point = point;
        }
        
        public  Desativar(String titulo, final DirectedSparseGraph<ToDoNode, String> g, final VisualizationViewer<ToDoNode, String> vv) {
            super(titulo);
            this.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
                    // Determine the new location of the window
                    int w = vertex.getToDo().getSize().width;
                    int h = vertex.getToDo().getSize().height;
                    int x = (dim.width-w)/2;
                    int y = (dim.height-h)/2;

                    if ((vertex.getState() != 2)&&(vertex.getType() == 2)) {
                    
                    //
                    //Realiza a tarefa: marca no como usado - mudar a cor dele
                    //
                    boolean aux = false;
                    
                    for (Iterator it = g.getEdges().iterator(); it.hasNext();) {
                        String edge = (String) it.next();
                        
                    }
                    
                    /*
                     * Essa parte de código não é necessário para que ele mude de cor,
                     * porém fica mais rápido a mudança.
                     */
                    vv.repaint();
                    vv.validate();
                    
                    }
                    
                }
                
            });
        }
        
    }
     
     
}
